package com.qf.common.service;

import com.qf.common.persistence.CrudDao;
import com.qf.common.persistence.DataEntity;
import com.qf.common.persistence.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * service基础类
 */
@Transactional(readOnly = true)
public abstract class CrudService <D extends CrudDao<T> , T extends DataEntity<T>>{
    /**
     * 持久层对象
     */
    @Autowired
    protected D dao;

    /**
     * 获取单条数据
     * @param id 主键
     */
    public T get(String id) {
        return dao.get(id);
    }

    /**
     * 保存
     * @param entity 对象
     */
    @Transactional(readOnly = false)
    public void save(T entity) {
        if (entity.getIsNewRecord()){
            entity.preInsert();
            dao.insert(entity);
        }else {
            entity.preUpdate();
            dao.update(entity);
        }
    }

    /**
     * 删除数据
     * @param entity 对象
     */
    @Transactional(readOnly = false)
    public void delete(T entity) {
        dao.delete(entity);
    }

    /**
     * 查询列表数据（不过滤权限）
     * @param entity 对象
     */
    public List<T> findList(T entity) {
        return dao.findList(entity);
    }

    public Page<T> findPage(Page<T> page, T entity) {
        entity.setPage(page);
        page.setList(dao.findList(entity));
        return page;
    }
}
